package version4.Server.rateLimit.provider;

import version4.Server.rateLimit.RateLimit;
import version4.Server.rateLimit.impl.TokenBucketRateLimit;

import java.util.HashMap;
import java.util.Map;

// RateLimitProvider 是一个单例类，用于提供RateLimit对象,饿汉模式
public class RateLimitProvider {
    /**
     * 每个服务名都对应一个RateLimit对象
     * 存储服务名和对应的RateLimit对象
     */
    private Map<String, RateLimit> rateLimitMap;
    private static  RateLimitProvider rateLimitProvider = new RateLimitProvider();
    private RateLimitProvider() {
        rateLimitMap = new HashMap<>();
    }
    public static RateLimitProvider getInstance() {
        return rateLimitProvider;
    }

    // 也可以在此处根据情况定义不同的RateLimit对象（限流策略）
    // void initRateLimitMap()

    public RateLimit getRateLimit(String interfaceName) {
        if(!rateLimitMap.containsKey(interfaceName)) {
            // 每100ms生成一个令牌，容量为10
            RateLimit rateLimit =new TokenBucketRateLimit(100,10);
            rateLimitMap.put(interfaceName, rateLimit);
        }
        return rateLimitMap.get(interfaceName);
    }
}
